/**
 * https://kaisery.gitbooks.io/trpl-zh-cn/content/ch10-02-traits.html
 * 使用 trait bound 有条件地实现方法
 * 
 * 通过使用带有 trait bound 的泛型参数的 impl 块，
 * 可以有条件地只为那些实现了特定 trait 的类型实现方法。
 * 
 * xqlin@qq.com
 * 2022/7/3 23:50
 */

//启用打印
use std::fmt::Display;

struct Pair<T> {
    x: T,
    y: T,
}

impl<T> Pair<T> {
    // 总是实现了 new 方法
    fn new(x: T, y: T) -> Self {
        Self {
            x, 
            y,
        }
    }    
}

impl<T: PartialOrd + Display> Pair<T> {
    fn display(&self) {
        if self.x >= self.y {
            println!("大的数是 x = {}", self.x);
        } else {
            println!("大的数是 y = {}", self.y);
        }
    }
}

pub fn test() {
    println!("----------------pair<T>---------------");

    let p1 = Pair::new(12, 56);
    p1.display();
}